package chapter007.point02;

/**
 * 人类
 * 人类有姓名, 年龄等属性
 * 所有的类都隐式继承自Object类
 *
 * @author Jack魏
 */
public class Human {
    /**
     * 无参构造方法
     * 语法: 和类名一样,当出现有参数的情况一定要带上无参构造函数.
     */
    public Human() {
    }
    /**
     * 姓名
     */
    private String name;
    /**
     * 年龄
     */
    private int age;
    /**
     * 标准的Java Bean
     * 需要getter, setter
     */
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /**
     * sayHello方法
     */
    public void sayHello(){
        System.out.println("大家好, 我叫 " + getName());
    }

    /**
     * 对sayHello方法的重载 规则:
     * 1.方法名相同
     * 2.方法的参数类型，参数个不一样
     * 3.方法的返回类型可以不相同
     * 4.方法的修饰符可以不相同
     *    main 方法也可以被重载
     */
    public static void sayHello(String name){
        System.out.println("大家好, 我叫 " + name);
    }

    /**
     * 重写父类Object类 toString方法 规则:
     * 1.方法名完全相同
     * 2.方法的参数及类型完全相同
     * 3.方法的返回类型完全相同
     * 4.方法的修饰符大于等于父类修饰符
     * 5.必须要@Override 注解
     */
    @Override
    public String toString() {
        return "Human{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}
